mysql Java 1.8.0_60,MariaDB v10。0和mariadbjavaclient 1.2.2,“未找到合适的驱动程序”
我想知道为什么我不能用笔记本电脑连接到mariadb。MariaDB安装了多个数据库,我可以使用HeidiSQL毫无问题地进行连接
我试图让Java应用程序连接到数据库,但我得到:
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/mysql
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
我已经下载了“mariadb-java-client-1.2.2.jar”,并将其添加到项目中
我的数据库URI是:
jdbc:mysql://localhost:3306/mysql
我已尝试使用以下方法更改此选项:
jdbc:mariadb://localhost:3306/mysql
同样的结果。我以前在另一台电脑上使用过,但我不知道为什么它不能在笔记本电脑上使用?用户名和密码正确,与用于连接HeidiSQL的用户名和密码相同
我试过两种方法:
Class.forName("com.mysql.jdbc.Driver");
及
Class.forName("org.mariadb.jdbc.Driver");
注册库,然后我读到这些不是必需的。。。。我错过了什么
代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class clsDB {
//The name of this class
private static final String TAG = clsDB.class.toString();
//Define database URL, user name and password
private static final String SERVER_ADDR = "localhost";
//The database address on Windows development system
private static final String DB_URL = "jdbc:mariadb://" + SERVER_ADDR + ":3306/mysql";
private static final String USER_NAME = "root";
private static final String PASSWORD = "RRCmcs2014";
//Database connection object
private Connection m_con = null;
/**
* Class constructor
* @throws Exception
*/
public clsDB() throws Exception {
//Create connection to database
connect();
}
/**
* @param strMethod the method the error occurs in
* @param strMsg the message to display
*/
private void errorMsg(String strMethod, String strMsg) {
System.out.println(TAG + "." + strMethod + ": " + strMsg);
}
/**
* Destructor
*/
protected void finalize() throws Throwable {
close();
}
/**
* Attempts to close database connection
* @throws SQLException
*/
public void close() throws SQLException {
if ( m_con != null && m_con.isClosed() == false ) {
m_con.close();
}
}
/**
* Commits any changes to the database
* @throws SQLException
*/
public void commit() throws SQLException {
if ( m_con != null && m_con.isClosed() == false ) {
m_con.commit();
}
}
/**
* Attempts to connect to database
* @throws Exception
*/
private void connect() throws Exception {
//Get a connection to the database
m_con = (Connection)DriverManager.getConnection(DB_URL,
USER_NAME,
PASSWORD);
if ( m_con == null ) {
throw new Exception( "Cannot connect to database!" );
}
//Disable auto-commit
m_con.setAutoCommit(false);
}
/**
* Performs SQL execute or update
* @param strSQL, the SQL statement to perform
* @return If an insert was performed then the insert ID,
* If an update then the number of effected rows
*/
public long execute(String strSQL) throws SQLException {
Statement st = null;
long lngRC = 0;
try{
if ( m_con != null ) {
if ( m_con.isClosed() == true ) {
try{
connect();
} catch( Exception ex ) {
errorMsg("query", ex.getMessage());
}
}
st = (Statement)m_con.createStatement();
if ( (lngRC = (int)st.executeUpdate(strSQL, Statement.RETURN_GENERATED_KEYS)) > 0 ) {
if ( strSQL.toUpperCase().startsWith("INSERT") == true ) {
ResultSet keys = st.getGeneratedKeys();
if ( keys != null ) {
keys.next();
lngRC = keys.getLong(1);
}
}
m_con.commit();
}
}
} catch( SQLException ex ) {
errorMsg("execute", ex.getMessage());
} finally {
if ( st != null ) {
st.close();
}
}
return lngRC;
}
/**
* @return The database connection object
*/
public Connection getConnection() {
return m_con;
}
/**
* Performs SQL query
* @param strSQL, the SQL statement to perform
* @return the result of the query
*/
public ResultSet query(String strSQL) throws SQLException {
Statement st = null;
ResultSet rs = null;
try{
if ( m_con != null ) {
if ( m_con.isClosed() == true ) {
try{
connect();
} catch( Exception ex ) {
errorMsg("query", ex.getMessage());
}
}
st = (Statement)m_con.createStatement();
rs = st.executeQuery(strSQL);
}
} catch( SQLException ex ) {
errorMsg("query", ex.getMessage());
}
return rs;
}
}
# 1 楼答案
Mariadb驱动程序1.2.2似乎对
org.slf4j.LoggerFactory
有一个隐藏的依赖关系如果使用命令,您实际上可以看到这一点
然后查看生成的堆栈跟踪。该命令对于JDBC4及更高版本不是必需的,但对于跟踪JDBC驱动程序自动注册失败的原因非常有用
因此,您得到的堆栈跟踪是:
这是一个bug,应该向MariaDB的供应商报告,因为他们在documentation中没有提到这个需求/依赖项
解决方法
现在,您的解决方案只是下载MariaDB driver 1.2.0